<?php
/**
 * Classe déléguée à l'export ICS
 *
 * @category librairies
 * @package ics
 *
 * @author Mickaël CASTANHEIRO
 * @version 1.0
 */
class ICS extends shBase
{
    /**
     * Instance de la classe vcalendar
     * @access private
     * @var vcalendar
     */
    private $cal;
    
    /**
     * Identifiant de la promotion
     * @access protected
     * @var integer
     */
    protected $promotion;

    /**
     * Genere et affiche le fichier .ics
     */
    public function display()
    {
	//Appel externe d'une classe
	require_once( 'vcalendar.class.php' );

	//Création de la base de l'agenda -- Début

	// Instance d'un objet vcalendar
	$this->cal = new vcalendar;

	
	//Création d'un identifiant unique pour la création du fichier .ics
	$this->cal->setConfig( 'unique_id', 'emploidutemps_AMIENS' );
	//Choix du type de méthode de publication du calendrier
	$this->cal->setProperty( 'method', 'PUBLISH' );
	//Intitulé du Calendrier

	//Récupération de l'agenda complet de la promotion sélectionée
        $promotions = shSGBD::select(
                'SELECT promotion.id AS id_promotion, specialite.intitule AS specialite, filiere.intitule AS filiere '.
                'FROM promotion '.
                'INNER JOIN specialite ON promotion.id_specialite=specialite.id '.
                'INNER JOIN filiere ON specialite.id_filiere=filiere.id '.
                'WHERE promotion.id=:promotion '.
                'ORDER BY filiere.intitule, specialite.intitule ',
                array(':promotion' => $this->promotion )
        );

	// Affectation des promotions à la selectbox
        foreach($promotions AS $promotion)
	{
            $this->cal->setProperty( "x-wr-calname", $promotion->filiere.' - '.$promotion->specialite );
	    //Nom du Fichier Généré
	    $this->cal->setConfig( "filename", $promotion->filiere.' - '.$promotion->specialite.".ics" );
        }
	//Petite Description du Calendrier en cours de création
	//$this->cal->setProperty( "X-WR-CALDESC", "Calendar Description" );
	//Choix du type d'affiche de l'heure
	$this->cal->setProperty( "X-WR-TIMEZONE", "Europe/Stockholm" );

	//Création de la base de l'agenda -- Fin

	//Récupération de l'agenda complet de la promotion sélectionée
        $seances = shSGBD::select(
		'SELECT DISTINCT ue.intitule AS ue, ue.couleur AS couleur, statut.intitule AS statut, type_enseignement.intitule AS type, enseignant.nom AS nom, enseignant.prenom AS prenom, seance.jour AS jour, seance.heure_debut AS heuredebut, seance.heure_fin AS heurefin, salle.intitule AS salle, groupe.intitule AS groupe '.
		'FROM seance '.
		'INNER JOIN mutualiser ON seance.id = mutualiser.id_seance '.
		'INNER JOIN promotion ON mutualiser.id_promotion = promotion.id '.
		'INNER JOIN assister ON promotion.id = assister.id_promotion '.
		'INNER JOIN enseignement ON enseignement.id = seance.id_enseignement '.
		'INNER JOIN ue ON enseignement.id_ue=ue.id '.
		'INNER JOIN type_enseignement ON enseignement.id_type_enseignement = type_enseignement.id '.
		'LEFT JOIN salle ON seance.id_salle = salle.id '.
		'LEFT JOIN participer ON participer.id_seance = seance.id '.
		'LEFT JOIN groupe ON participer.id_groupe = groupe.id '.
		'LEFT JOIN enseignant ON seance.id_enseignant = enseignant.id '.
		'LEFT JOIN statut ON statut.id = enseignant.id_statut '.
		'WHERE mutualiser.id_promotion =:promotion',
		array(':promotion' => $this->promotion )
        );

	// Affectations des seances dans le fichier ICS
        foreach($seances AS $seance)
	{
            //Création d'une séance ( la séance s'appelle EVENT pour le format ICS)
	    $vevent = new vevent();

		//Manipulation de la date et des heures de la séance pour correspondre au format ICS
		$date = explode("-",$seance->jour);
		$heuredebut = explode(":",$seance->heuredebut);
		$heurefin = explode(":",$seance->heurefin);

		//Saisie de la date de début de la séance
		$debut = array( 'year'=>$date[0], 'month'=>$date[1], 'day'=>$date[2], 'hour'=>$heuredebut[0], 'min'=>$heuredebut[1], 'sec'=>$heuredebut[2] );
		$vevent->setProperty( 'dtstart', $debut );
		//Saisie de la date de fin de la séance
		$fin = array( 'year'=>$date[0], 'month'=>$date[1], 'day'=>$date[2], 'hour'=>$heurefin[0], 'min'=>$heurefin[1], 'sec'=>$heurefin[2] );
		$vevent->setProperty( 'dtend', $fin );

		//Saisie du Lieu de la séance
		$vevent->setProperty( 'LOCATION', $seance->nom.' '.$seance->prenom.' - '.$seance->salle );
		//Saisie du Titre de la séance
		$vevent->setProperty( 'summary', $seance->type.' - '.$seance->ue.' - '.$seance->groupe );
		//Saisie de la description de la séance
		//$vevent->setProperty( 'description', 'This is a description' );
		//Ajout des différents commentaires
		//$vevent->setProperty( 'comment', 'This is a comment' );
		//Ajout d'un participant (Ce participant sera considéré comme obligatoire)
		//$vevent->setProperty( 'attendee', 'attendee1@icaldomain.net' );
	    $this->cal->setComponent ( $vevent );
        }

	//Affichage de l'agenda précedement créer.
	$this->cal->returnCalendar();
    }
}
?>
